CLCK 01: Установка ClickHouse

Описание:

Приветствуем вас на практикуме ClickHouse by Rebrain!

В данном практикуме мы рассмотрим активно набирающий популярность ClickHouse - колоночную аналитическую СУБД. Мы узнаем в чем же особенности данной БД, какие проблемы она решает, а также где и когда её стоит внедрять. Мы будем придерживаться примерно такого плана - в начале расскажем вам об инфраструктурных вещах - таких как установка, настройка мониторинга и так далее. А под конец нам придется затронуть темы, больше связанные с работой dba - создание таблиц, настройки репликаций и шардирования. Итак, поехали!

История зарождения ClickHouse

Вы могли слышать про Яндекс и его сервис Яндекс.Метрики, вторую крупнейшую в мире платформу для веб-аналитики. Эта платформа насчитывает более 13 триллионов записей в базе данных и имеет поток событий более 20 миллиардов в сутки! Достаточно большие цифры, не так ли? Среди основных задач этой платформы было построение отчетов в режиме онлайн на основе «сырых» неагрегированных данных, при этом все необходимые вычисления производятся в момент запроса пользователя. Тогда на рынке не было решений, которые позволили бы обрабатывать петабайты данных на лету. И чтобы справиться с этой задачей, команда разработчиков из Яндекса начала разрабатывать свою СУБД — ClickHouse.

Первый прототип появился в 2009 году. А к концу 2014 года была запущена Метрика 2.0, она работала на базе ClickHouse и позволила пользователям строить произвольные отчеты. Все это время проект был закрытый, и только в июне 2016-го года исходный код системы был выложен в open-source под лицензией Apache 2.0, чтобы любой мог попробовать использовать ее для решения проблем. Уже более 11-ти лет ведется активная разработка ClickHouse. БД стремительно набирает популярность и привлекает все большее количество людей, которые становятся частью активного комьюнити, готового помочь друг другу.

Возможности ClickHouse

ClickHouse имеет ряд особенностей, которые выделяют его среди подобных БД, существующих на рынке.

Производительность

ClickHouse обладает внушительной производительностью. Для оценки можно взять во внимание несколько факторов:

Вы также можете найти различные бенчмарки ClickHouse в сравнении с другими базами данных здесь: https://clickhouse.tech/benchmark/dbms/

Колоночная СУБД

Колоночные БД в целом предназначены для хранения редко изменяемых данных, таких как логи, события и т.д., а поэтому применяются, как правило, в аналитических системах или аналитических хранилищах данных. Они отлично справляются с выборкой данных, имеют хорошую скорость вставки данных, но для них дорого обходятся операции по обновлению и удалению данных.

Хранение данных

ClickHouse хранит данные по колонкам, то есть каждая колонка в таблице — это отдельный файл на диске. За счет этого поддерживается постоянное добавление данных в таблицу, а блокировки при этом отсутствуют. Также добавление или удаление колонок в таблице является очень дешевой операцией по сравнению со строковыми БД.

Данные в колонке отсортированы и проиндексированы движком MergeTree, структура их хранения напоминает индексы в строковых БД, однако между колонками нет физической связи (отдельные файлы на диске), что существенно увеличивает производительность при чтении данных с диска.

При чтении данных с диска колоночная БД считывает только нужные ей столбцы (файлы), в то время как строковая БД считывает весь блок данных, а потом фильтрует выборку.

Сжатие данных

Метод хранения данных в колоночных БД позволяет хранить данные одного типа вместе, здесь одну из ключевых ролей играет сжатие данных, что позволяет использовать гораздо меньше пространства на диске и повысить общую производительность. Чем меньше вариаций данных имеет каждая колонка, тем сильнее она может быть сжата.

Особенности работы с данными

В отличие от многих колоночных БД, которые могут работать только в оперативной памяти, ClickHouse спроектирован для работы на обычных жестких дисках, что существенно снижает стоимость хранения на гигабайт данных. При этом при наличии дополнительной оперативной памяти и SSD ClickHouse будет их полноценно использовать.

Параллельная обработка запроса (Шардирование)

Большие запросы естественным образом распараллеливаются, используя все необходимые ресурсы из доступных на сервере. Также в ClickHouse есть возможность распределенной обработки запроса на многих серверах. Можно расположить данные на разных шардах, которые представляют собой группу реплик, использующихся для отказоустойчивости. В таком случае запрос будет выполняться на всех шардах параллельно. Такой кейс мы тоже будем рассматривать.

Подходит для онлайн запросов

Низкие задержки позволяют не откладывать выполнение запроса и не подготавливать ответ заранее, а выполнять его именно в момент загрузки страницы пользовательского интерфейса. То есть, в режиме онлайн.

Репликация данных

ClickHouse имеет встроенную асинхронную multimaster репликацию, но мы рекомендуем использовать для этого Zookeeper. Этот кейс мы также рассмотрим в одном из следующих практикумов.

Поддержка SQL

ClickHouse поддерживает декларативный язык запросов на основе SQL и во многих случаях совпадающий с SQL стандартом. Поддерживаются такие подзапросы, как GROUP BY, ORDER BY, в секциях FROM, IN, JOIN, а также скалярные подзапросы. Зависимые подзапросы и оконные функции не поддерживаются.

Установка ClickHouse

ClickHouse поддерживает любую операционную систему Linux с архитектурой процессора x86_64, AArch64 или PowerPC64LE.

ClickHouse можно установить разными способами: используя deb/rpm пакеты, tgz архивом, из докер-образа или собрать из иходного кода (так как проект open source).

В практикуме мы будем следовать рекомендациям и установим его, используя официальные скомпилированные deb или rpm пакеты из официального репозитория Яндекс:

Если вы хотите использовать наиболее свежую версию, замените stable на testing (рекомендуется для тестовых окружений).

Пакеты из официального репозитория собраны под архитектуру процессора x86_64 и используют набор инструкций SSE 4.2, поэтому, если не указано иное, его поддержка в используемом процессоре становится дополнительным требованием к системе.

Установка

Для установки нам потребуется скачать пакеты clickhouse-server и clickhouse-client с официального репозитория ClickHouse. Для этого понадобится добавить GPG ключи на машину, а также добавить ClickHouse репозиторий к разрешенному списку вашей машины, детальнее это описано здесь. При установке пакетов вас попросят установить пароль для стандартного пользователя, его можно оставить пустым или установить по вашему желанию.

Запуск

Для запуска сервера в качестве демона достаточно запустить сервис clickhouse-server.

По умолчанию сервер слушает входящие соединения на localhost:9000.

Файл конфигурации сервера находится в /etc/clickhouse-server/config.xml.

Логи можно посмотреть в директории /var/log/clickhouse-server/.

Также можно запустить сервер вручную из консоли, используя исполняемый файл clickhouse-server. В качестве файла конфигурации будет использован файл ./config.xml из текущей директории, но возможно указать и другой путь к файлу в параметре --config.

Проверка

После запуска сервера соединиться с ним можно с помощью клиента командной строки:

clickhouse-client.

По умолчанию он соединяется с localhost:9000 от имени пользователя default без пароля. Если вы указывали пароль для default пользователя при установке пакетов, то вы можете определить пароль при помощи флага --password $yourpass либо флага --ask-password, во втором случае клиент отдельно попросит ввести пароль. Также клиент может быть использован для соединения с удаленным сервером, для этого применяется аргумент --host.

Терминал должен использовать кодировку UTF-8.

Полезные ссылки:

Задание. Правила:

  1. После нажатия кнопки «Начать выполнение» для вас будет подготовлено окружение и предоставлены необходимые доступы.
  2. Также вам будут выданы переменные (если они будут нужны), которые в задании указаны в фигурных скобках, — их надо будет подставить при выполнении задания.
  3. После выполнения всех пунктов задания нажмите кнопку «Отправить на проверку», и в течение ближайших 3-5 минут скрипт проверит выполнение всех условий и выставит вам оценку.
  4. В случае, если вы что-то забыли, можно исправить ошибки и отправить на проверку повторно.
  5. Также, если вы успешно сдали задание, но у вас остались вопросы — вы всегда сможете задать их куратору после проверки или в чате в любое удобное для вас время.

Задание:

  1. Добавьте официальные репозитории Clickhouse в вашу машину с Ubuntu.
  2. Обновите пакеты, а затем установите clickhouse-server и clickhouse-client из официальных репозиториев Clickhouse.
  3. Не задавайте пароля для пользователя default - оставьте его пустым.
  4. Запустите clickhouse-server сервис.
  5. Проверьте работоспособность ClickHouse зайдя в clickhouse-client и сделав тестовый SELECT 1.
  6. Если все работает отправляйте задание на проверку.